// //单一类型
// let b: number
// b = 123


// //声明并赋值
// let c: boolean = true


// function fun(name: string) {
//    console.log(name);

// }

// console.log(b, 'b');

// console.log(c, 'b');

// fun('index')


//2 ------------------------自动类型判断

// let one: number
// one = 123


// let two = 8  //声明 一个变量并赋值

// console.log(typeof one);
// console.log(typeof two);



// any 可以是任何值  如果是字符串赋值  同时也会变成字符串
{
   let a: number
   a = 123

   let c: any
   c = '123'

   c = a
   console.log(typeof c, 'c是什么类型的')  //number  类型

}




// Ts的 unknown类型 和any 类型区别
{
   let a: unknown;
   a = 123
   a = '123'
   a = true

   let b: boolean;

   // unknown 类型必须是同类型才能 赋值  
   if (typeof a === 'boolean') b = a


   console.log(b, 'bunknown')
   console.log(a, 'bunknown')
}


// TS 中的类型断言   字面意思 ：告诉你是什么类型
{
   let a: unknown

   a = 123

   let b: number

   if (typeof a === 'number') b = a

   b = a as number   // a as number  赋值前告诉他是什么类型
   console.log(b, 'Ts的断言')

}



// TS 中的函数 

{
   //正确的演示  
   // function list(): number {
   //    return 123
   // }
   // let a = list()
   // //必须声明
   // console.log(a, '   let a = list(123) ')   // 123


   // void 类型 代表没有返回值  或者返回值为空  
   // function fun(): void {
   //    //其他类型都不会返回
   //    // return null //  可以返回 
   //    // return undefined // 也可以返回 
   //    // return;  
   // }


}


// TS  中的对象类型声明

{
   let a: object
   a = {}
   a = function () { }

   //  用 ? 来判断 需求可有可无对象
   let c: {
      name?: string,
      age?: number,
      sex?: string
   }


   //unknown 可以是任何类型  以对象的形式去声明
   let d: {
      name: string
      [propNmae: string]: unknown  //可以是任何类型
   }
   // [propNmae:string]  满足任何字符串   
   d = {
      name: 'sadas',
      sayhello() {
         console.log(true)
      }
   }
   if (typeof d.sayhello === 'function') d.sayhello()
   console.log(d, 'dddddddd')   // true
}


// TS   中扩展你类型  tuple叫元组     
// 元组就是定长的数组  固定数组的指定类型 叫元组
{
   let a: [string, boolean, number]
   a = ['xxsxa', true, 123]

}



// TS 中的Enum 
{
   enum a {
      male,
      female
   }

   console.log(a.male, 'male')    //  0 
   console.log(a.female, 'female')  // 1 


   //数字枚举
   // enum a {
   //    male = 3,
   //    female
   // }
   // console.log(a.male, 'male')    //   3
   // console.log(a.female, 'female')  //  4 
   // 也就是说 male 是 0  femal 是会递增  +1

}


// TS  中联合类型声明  

{

   let a: number | string
   a = 123
   a = '123'

   let b: 12 | 13 | 14
   b = 12
   // b = 15  // 报错  B只能是 12 13 14  
}


// TS   联合类型声明    type myType （别名）
{

   type myType = 1 | 2 | 3 | 4 | 6
   let a: myType
}


// TS  配置选项  自动编译
{
   console.log('在看看？？？121232132133213')
}
